home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / maze.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1987-02-22  |  2.0 KB  |  106 lines

  1. 10  REM ***************************
  2. 20  REM **        AMAZE          **
  3. 30  REM ***************************
  4. 40  REM
  5. 50  CLEAR
  6. 60  SCREEN 1
  7. 70  CLS
  8. 80  KEY OFF
  9. 90  COLOR 0,1
  10. 100  LOCATE 12,12
  11. 110  PRINT "***  AMAZE  ***"
  12. 120  GOSUB 760
  13. 130  CLS
  14. 140  LOCATE 7,1
  15. 150  INPUT "How many paths wide ";WIDE
  16. 160  IF WIDE > 0 AND WIDE < 160 THEN 200
  17. 170  PRINT"Valid range is 1 to 159"
  18. 180  BEEP
  19. 190  GOTO 150
  20. 200  INPUT "How many paths high ";HIGH
  21. 210  IF HIGH >0 AND HIGH <100 THEN 260
  22. 220  PRINT "Valid range is 1 to 99"
  23. 230  BEEP
  24. 240  GOTO 200
  25. 250  REM
  26. 260  WINC=320/(WIDE+1)
  27. 270  HINC=200/(HIGH+1)
  28. 280  CLS
  29. 290  LINE (0,0)-(WIDE*WINC,HIGH*HINC),,B
  30. 300  COUNT=WIDE*HIGH
  31. 310  FOR I= 0 TO COUNT
  32. 320  PTR=(PTR+997) MOD COUNT
  33. 330  X=INT(PTR/HIGH)
  34. 340  Y=PTR-X*HIGH
  35. 350  X=X*WINC
  36. 360  Y=Y*HINC
  37. 370  IF POINT(X,Y) THEN 600
  38. 380  DIR=INT(4*RND+1)
  39. 390  DIR2=DIR
  40. 400  DIR=DIR MOD 4 + 1
  41. 410  XN =((DIR=1)-(DIR=3))*WINC+X
  42. 420  YN =((DIR=2)-(DIR=4))*HINC+Y
  43. 430  IF POINT(XN,YN)=0THEN 550
  44. 440  LINE(X,Y)-(XN,YN)
  45. 450  DIR=INT(4*RND+1)
  46. 460  FOR K=1 TO 4
  47. 470  DIR=DIR MOD 4+1
  48. 480  XN=((DIR=1)-(DIR=3))*WINC+X
  49. 490  YN=((DIR=2)-(DIR=4))*HINC+Y
  50. 500  IF POINT(XN,YN)THEN 590
  51. 510  LINE(X,Y)-(XN,YN)
  52. 520  X=XN
  53. 530  Y=YN
  54. 540  GOTO 450
  55. 550  IF DIR<> DIR2 THEN 580
  56. 560  X=XN
  57. 570  Y=YN
  58. 580  GOTO 400
  59. 590  NEXT K
  60. 600  NEXT I
  61. 610  REM
  62. 620  REM Open the doors on each side
  63. 630  Y=(HIGH/2)*HINC
  64. 640  LINE (0,Y)-(0,Y+HINC),0
  65. 650  LINE (WIDE*WINC,Y)-(WIDE*WINC,Y+HINC),0
  66. 660  REM
  67. 670  REM Done ...
  68. 680  REM If user presses "p" then dump graphics to printer
  69. 690  REM Else draw another maze whenever any key is pressed.
  70. 700  K$=INKEY$
  71. 710  IF K$="" THEN 700
  72. 720  IF K$="p" OR K$="P"THEN GOSUB 870
  73. 730  GOTO 130
  74. 740  REM
  75. 750  REM Wait for user and be randomizing the generator
  76. 760  LOCATE 25,9
  77. 770  PRINT "Press any key to begin";
  78. 780  RNDM=RND
  79. 790  K$=INKEY$
  80. 800  IF K$= "" THEN 780
  81. 810  RANDOMIZE 64000*RND-32000
  82. 820  LOCATE 25,1
  83. 830  PRINT SPACE$(39);
  84. 840  RETURN
  85. 850  REM
  86. 860  REM Subroutine to dump graphic maze to printer
  87. 870  DEF SEG=&HB800
  88. 880  E$=CHR$(27)
  89. 890  WIDTH "LPT1:",255
  90. 900  LPRINT E$+"1";
  91. 910  LPRINT E$+"W" +CHR$(1);
  92. 920  FOR ROW = 0 TO 79
  93. 930  A$= ""
  94. 940  FOR COL=99 TO 0 STEP -1
  95. 950  LOCA$=CHR$(PEEK(COL*80+ROW))
  96. 960  LOCB$=CHR$(PEEK(COL*80+ROW+&H2000))
  97. 970  A$=A$+LOCB$+LOCB$
  98. 980  A$=A$+LOCA$+LOCA$
  99. 990  IF COL<>49 THEN 1020
  100. 1000  LPRINT E$+"K"+CHR$(144)+CHR$(1)+A$;
  101. 1010  A$= ""
  102. 1020  NEXT COL
  103. 1030  LPRINT A$
  104. 1040  NEXT ROW
  105. 1050  RETURN
  106.